package com.example.study.jetpack.compose

import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp

/**
 *  created by ws
 *   on 2022/2/28
 *   describe:https://blog.csdn.net/Mr_Tony/article/details/118770506?spm=1001.2014.3001.5502
 */
class Compose的滚动布局 {
    /*首先Compose中是没有滚动布局的，只有滚动修饰符verticalScroll和
    * horizontalScroll。通过使用这两个修饰符来修饰布局的时候可以使布局进行滚动
    * */
    @Composable
    fun ScrollBoxes() {
        Column(
            modifier = Modifier
                .background(Color.LightGray)
                .size(100.dp)
                .verticalScroll(rememberScrollState())
        ) {
            repeat(10) {
                Text("Item $it", modifier = Modifier.padding(2.dp))
            }
        }
    }
    /*ScrollState,如果我们想要主动滚动列表或者获取一些滚动状态的话,可以是使用ScrollState*/
    @Composable
    private fun nestingScroll(){
        val gradient = Brush.verticalGradient(0f to Color.Gray, 1000f to Color.White)
        Box(
            modifier = Modifier
                .background(Color.LightGray)
                .verticalScroll(rememberScrollState())
                .padding(32.dp)
        ) {
            Column {
                repeat(6) {
                    Box(
                        modifier = Modifier
                            .height(128.dp)
                            .verticalScroll(rememberScrollState())
                    ) {
                        Text(
                            "Scroll here",
                            modifier = Modifier
                                .border(12.dp, Color.DarkGray)
                                .background(brush = gradient)
                                .padding(24.dp)
                                .height(150.dp)
                        )
                    }
                }
            }
        }
    }
    /*滚动嵌套
    compose支持滚动嵌套.其中多个元素对单个滚动手势做出反应.简单的嵌套
    操作不用操作,但如一个列表中的另一个列表,更复杂如折叠工具栏.启动滚动
    操作的手势会自动从子项传播到父项,这样当子项无法进一步滚动时,手势尤由其父元素
    处理
    折叠工具栏的代码可以查看
https://developer.android.google.cn/reference/kotlin/androidx/compose/ui/input/nestedscroll/package-summary#(androidx.compose.ui.Modifier).nestedScroll(androidx.compose.ui.input.nestedscroll.NestedScrollConnection,androidx.compose.ui.input.nestedscroll.NestedScrollDispatcher)

以下示例verticalScroll在容器中应用了修饰符的元素,该容器也verticalScroll应用了修饰符
*/
@Composable
fun shili1(){
        val gradient = Brush.verticalGradient(0f to Color.Gray, 1000f to Color.White)
        Box(
            modifier = Modifier
                .background(Color.LightGray)
                .verticalScroll(rememberScrollState())
                .padding(32.dp)
        ) {
            Column {
                repeat(6) {
                    Box(
                        modifier = Modifier
                            .height(128.dp)
                            .verticalScroll(rememberScrollState())
                    ) {
                        Text(
                            "Scroll here",
                            modifier = Modifier
                                .border(12.dp, Color.DarkGray)
                                .background(brush = gradient)
                                .padding(24.dp)
                                .height(150.dp)
                        )
                    }
                }
            }
        }
}
    /*使用nestedScroll修饰符
    如果需要在多个元素之间创建高级协调滚动,nestedScroll修改器通过定义\
    嵌套滚动层次结构提供更大的灵活性,相关api如下
    fun Modifier.nestedScroll(
    connection: NestedScrollConnection,
    dispatcher: NestedScrollDispatcher? = null
): Modifier
具体代码略微复杂，后面再说这个的具体使用方式，官方教程如下:

https://developer.android.google.cn/reference/kotlin/androidx/compose/ui/input/nestedscroll/package-summary#(androidx.compose.ui.Modifier).nestedScroll(androidx.compose.ui.input.nestedscroll.NestedScrollConnection,androidx.compose.ui.input.nestedscroll.NestedScrollDispatcher)

*/

}